package com.cnswhy.cloud.server.core.dto;

import com.cnswhy.cloud.server.common.entity.enumeration.ExpressCompany;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 * 实体类
 * 商品订单表
 * </p>
 *
 * @author cnswhy
 * @since 2020-10-25
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = false)
@Builder
@ApiModel(value = "ShopOrderSaveDTO", description = "商品订单表")
public class ShopOrderSaveDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 订单编号
     */
    @ApiModelProperty(value = "订单编号")
    @NotEmpty(message = "订单编号不能为空")
    @Length(max = 50, message = "订单编号长度不能超过50")
    private String orderNo;
    /**
     * 买家id
     */
    @ApiModelProperty(value = "买家id")
    @NotNull(message = "买家id不能为空")
    private Long customerId;
    /**
     * 商户id
     */
    @ApiModelProperty(value = "商户id")
    @NotNull(message = "商户id不能为空")
    private Long merchantId;
    /**
     * 支付类型 1-微信支付 2-支付宝3积分支付4拼购券支付5购物券支付
     */
    @ApiModelProperty(value = "支付类型 1-微信支付 2-支付宝3积分支付4拼购券支付5购物券支付")
    @NotNull(message = "支付类型 1-微信支付 2-支付宝3积分支付4拼购券支付5购物券支付不能为空")
    private Integer payType;
    /**
     * 订单总金额
     */
    @ApiModelProperty(value = "订单总金额")
    @NotNull(message = "订单总金额不能为空")
    private BigDecimal orderPrice;
    /**
     * 运费
     */
    @ApiModelProperty(value = "运费")
    private BigDecimal freightPrice;
    /**
     * 抵扣积分
     */
    @ApiModelProperty(value = "抵扣积分")
    private Integer deductionIntegral;
    /**
     * 状态：1-待付款 2-待发货 3-待收货 4-待评价 5-已完成 6-已取消 7-已关闭 8-退款中 9-拒绝退款 10-已退款 11-已删除
     */
    @ApiModelProperty(value = "状态：1-待付款 2-待发货 3-待收货 4-待评价 5-已完成 6-已取消 7-已关闭 8-退款中 9-拒绝退款 10-已退款 11-已删除")
    private Integer status;
    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Length(max = 500, message = "备注长度不能超过500")
    private String remark;
    /**
     * 退款单所属支付单id
     */
    @ApiModelProperty(value = "退款单所属支付单id")
    private Long payOrderId;

    /**
     * 支付订单号
     */
    @ApiModelProperty(value = "支付订单号")
    @Length(max = 50, message = "支付订单号长度不能超过50")
    private String payOrderNo;
    /**
     * 通道返回订单号
     */
    @ApiModelProperty(value = "通道返回订单号")
    @Length(max = 50, message = "通道返回订单号长度不能超过50")
    private String returnOrderNo;
    /**
     * 支付说明
     */
    @ApiModelProperty(value = "支付说明")
    @Length(max = 200, message = "支付说明长度不能超过200")
    private String payMsg;
    /**
     * 取消原因
     */
    @ApiModelProperty(value = "取消原因")
    @Length(max = 255, message = "取消原因长度不能超过255")
    private String cancelDesc;
    /**
     * 申请退款原因
     */
    @ApiModelProperty(value = "申请退款原因")
    @Length(max = 500, message = "申请退款原因长度不能超过500")
    private String refundApplyDesc;
    /**
     * 申请退款时间
     */
    @ApiModelProperty(value = "申请退款时间")
    private LocalDateTime refundApplyTime;
    /**
     * 退款审核说明
     */
    @ApiModelProperty(value = "退款审核说明")
    @Length(max = 500, message = "退款审核说明长度不能超过500")
    private String refundVerifyDesc;
    /**
     * 退款审核时间
     */
    @ApiModelProperty(value = "退款审核时间")
    private LocalDateTime refundVerifyTime;
    /**
     * 订单是否已完结（完成时间超过最大退款天数）
     */
    @ApiModelProperty(value = "订单是否已完结（完成时间超过最大退款天数）")
    @NotNull(message = "订单是否已完结（完成时间超过最大退款天数）不能为空")
    private Integer isEnd;
    /**
     * 快递单号
     */
    @ApiModelProperty(value = "快递单号")
    @Length(max = 100, message = "快递单号长度不能超过100")
    private String expressNumber;
    /**
     * 快递公司
     */
    @ApiModelProperty(value = "快递公司")
    private ExpressCompany expressCompany;
    /**
     * 抵扣类型1购物券2批发券
     */
    @ApiModelProperty(value = "抵扣类型1购物券2批发券")
    private Integer deductionType;

}
